这个算法既可以用于二叉树 也可以用于搜索二叉树


这种方式也可以   但是要保证 ss 间隔只有一个空格
	TreeNode* rebuildTree(stringstream &ss) {
		string tmp;
		std::getline(ss, tmp, ' ');
	

		if (tmp == "#")
			return nullptr;

		TreeNode* node = new TreeNode(stoi(tmp));
		node->left = rebuildTree(ss);  //这里当根只有一个节点时 默认是有右子树      这里left 和right可以更换位置  对应的 上面也要更换位置
		node->right = rebuildTree(ss);

		return node;
	}





class Codec {
public:

	// Encodes a tree to a single string.
	string serialize(TreeNode* root) {
		if (root == nullptr)
			return "#";

		return to_string(root->val) + ' ' + serialize(root->left) + ' ' + serialize(root->right);
	}

	// Decodes your encoded data to tree.
	TreeNode* rebuildTree(stringstream &ss) {
		string tmp;
		ss >> tmp;

		if (tmp == "#")
			return nullptr;

		TreeNode* node = new TreeNode(stoi(tmp));
		node->left = rebuildTree(ss);  //这里当根只有一个节点时 默认是有右子树      这里left 和right可以更换位置  对应的 上面也要更换位置
		node->right = rebuildTree(ss);

		return node;
	}

	TreeNode* deserialize(string data) {
		stringstream ss(data);
		return rebuildTree(ss);
	}
};


int main()

{


	stringstream ss("12#8#22");
	string mytemp;
	ss >> mytemp;

	Codec des;
	//TreeNode *head = des.deserialize("1_2_3_#_#_4_5_#_#_#_#");
	TreeNode *head=des.deserialize("1 # 2  3  #  4  #  # 5 #  #");

	string str= des.serialize(head);